package mysql8学习.高级.第13章_事务的基本知识;

/**
 * 2.3 隐式提交数据的情况 简单来说  只有DML可以不自动提交
 * ● 数据定义语言(Data definition language,缩写为: DDL)
 * 数据库对象，指的就是数据库、表、视图、存储过程等结构。
 * 当我们使用 CREATE(创建)、ALTER(更改)、 DROP 等语句去修改数据库对象时，
 * 就会隐式的提交前边语句所属于的事务。
 * ● 隐式使用或修改mysql数据库中的表
 * 当我们使用ALTER USER、 CREATE USER、 DROP USER、 GRANT、 RENAME USER、
 * REVOKE 、SET PASSWORD等语句时也会隐式的提交前边语句所属于的事务。
 * ● 事务控制或关于锁定的语句
 *  ①当我们在一个事务还没提交或者回滚时就又使用START TRANSACTION
 *    或者BEGIN语句开启了另一个事务时，会隐式的提交，上一个事务。
 *  ②当前的autocommit系统变量的值为0FF,我们手动把它调为ON时，
 *   也会隐式的提交前边语句所属的事务。
 *  ③使用LOCK TABLES、UNLOCK TABLES 等关于锁定的语句也会隐式的提交前边语句所属的事务。
 * ● 加载数据的语句
 *  使用 LOAD DATA 语句来批量往数据库中导入数据时，也会隐式的提交前边语句所属的事务。
 * ● 关于MySQL复制的一些语句
 *  使用START SLAVE、STOP SLAVE、RESET SLAVE、 CHANGE MASTER TO等语句时
 *  会隐式的提交前边语句所属的事务。
 * ● 其它的一些语句
 *  使用ANALYZE TABLE、 CACHE INDEX、
 *  CHECK TABLE、 FLUSH、 LOAD INDEX INTO CACHE 、
 *  OPTIMIZE TABLE、 REPAIR TABLE、 RESET 等语句也会隐式的提交前边语句所属的事务。
 *
 */
public class B3_隐式提交数据情况 {//myisam不支持事务  InnoDB 支持事务
}


/**
 * 你能看到相同的SQL代码，只是在事务开始之前设置了SET @@completion_type = 1;
 * 这里我讲解下MySQL中completion. type参数的作用，实际上这个参数有3种可能:
 * 1. completion=0, 这是默认情况。
 *   当我们执行COMMIT的时候会提交事务,在执行下一个事务时，
 *   还需要使用START TRANSACTION 或者BEGIN 来开启。
 * 2. completion=1，这种情况下，当我们提交事务后，
 *   相当于执行了COMMIT AND CHAIN,也就是开启一个链式事务，
 *   即当我们提交事务之后会开启一个相同隔离级别的事务。
 * 3. completion=2 ，这种情况下COMMIT=COMMIT AND RELEASE ，
 *   也就是当我们提交后，会自动与服务器断开连接。
 *
 * 当我们设置autocommit=0时，不论是否采用START TRANSACTION或者BEGIN的方式来开启事务，
 * 都需要用COMMIT进行提交，让事务生效，使用ROLLBACK对事务进行回滚。
 * 当我们设置autocommit=1时，每条SQL语句都会自动进行提交。
 * 不过这时，如果你采用START TRANSACTION或者BEGIN的方式来显式地开启事务，
 * 那么这个事务只有在COMMIT时才会生效，在ROLLBACK时才会回滚。
 *
 */